package ExpressFour;

import java.io.File;
import java.util.LinkedList;

//目录
public class MyDirectory extends INode {
    private final LinkedList<INode>list;//目录下面有许多文件，目录也算是文件
    final static String type="directory";
    private INode parent;
    //初始化
    MyDirectory(String name, long Inode, String time) {
        super(name, Inode, time,type);
        parent=null;
        list=new LinkedList<>();
    }

    public void setParent(INode parent) {
        this.parent = parent;
    }

    public INode getParent() {
        return parent;
    }

    boolean add(INode file){
        if(file!=null) {
            //保证文件非空
            for (INode node : list) {
                //名字是否相同
                if (node.getName().equals(file.getName())) {
                    //名字相同不可创建
                    return false;
                }
            }
            //如果是目录，设置父目录为本目录
            if(file.getType().equals(type)) {
                //如果添加的是目录，那么设置父结点
                ((MyDirectory)file).setParent(this);
            }
            list.add(file);
            return true;
        }
        else{
            return false;
        }
    }
    /*
    非空目录提示不可以删除，文件能够直接删除
     */
    //设计两个删除，删除目录，以及删除文件
    boolean remove(String fileName){
        //全部判断
        for(int i=0;i<list.size();i++){
            //如果文件名相同
            if(list.get(i).getName().equals(fileName)){
                //如果是目录类型
                if(list.get(i).getType().equals(type)){
                    //空目录直接删除
                    if(((MyDirectory)list.get(i)).getList().size()==0){
                        list.remove(list.get(i));
                        return true;
                    }
                    else {
                        //非空目录不可以删除
                        return false;
                    }
                }
                else{
                    //是文件，删除实体文件
                    File file = new File(((MyFile) list.get(i)).getPath());
                    if (file.delete()) {
                        //文件能够删除
                        list.remove(list.get(i));
                        return true;
                    } else {
                        //文件不能够删除
                        return false;
                    }
                    //如果是文件，直接移除
                    //list.remove(list.get(i));
                }
            }
        }
        //没有找到文件
        return false;
    }

    public LinkedList<INode> getList() {
        return list;
    }
}
